home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 701-725 / 709 / planets / caldat.c next >
C/C++ Source or Header  |  1995-03-18  |  1KB  |  50 lines

  1. /*******************************************************************************
  2. ** Compute the local date from a given Julian day number.                     **
  3. *******************************************************************************/
  4. #include <math.h>
  5.  
  6. #define IGREG 2299161 /* Julian day number of October 15th, 1582 */
  7.  
  8. void caldat(julian,mm,dd,yyyy)
  9. long julian;
  10. int *mm,*dd,*yyyy;
  11.    {
  12.    long jalpha,ja,jb,jc,jd,to_long();
  13.  
  14.    if(julian < IGREG) /* Julian calendar */
  15.       ja = julian + 1524;
  16.    else { /* Gregorian calendar */
  17.       jalpha = to_long((julian-1867216.25)/36524.25);
  18.       ja     = julian + jalpha - to_long(0.25*jalpha) + 1525;
  19.       }
  20.    jb = to_long(6680.+((ja-2439870)-122.1)/365.25);
  21.    jc = 365*jb+to_long(0.25*jb);
  22.    jd = to_long((ja-jc)/30.6001);
  23.    *dd = (int)(ja-jc-to_long(30.6001*jd));
  24.    *mm = (int)jd-1;
  25.    if(*mm > 12)
  26.       *mm -= 12;
  27.    *yyyy = (int)jb-4715;
  28.    if(*mm > 2)
  29.       --(*yyyy);
  30.    if(*yyyy <= 0)
  31.       --(*yyyy);
  32.    }
  33.  
  34. /*******************************************************************************
  35. ** Compute the local time in (hour, minute) from a given day fraction.        **
  36. *******************************************************************************/
  37. void caltim(jd_frac,hour,min)
  38. double jd_frac;
  39. int    *hour;
  40. int    *min;
  41.    {
  42.    double x;
  43.  
  44.    x = jd_frac * 24.;
  45.    *hour = (int)floor(x);
  46.    x -= floor(x);
  47.    x *= 60.;
  48.    *min = (int)floor(x);
  49.    }
  50.